/*********************************************************************\
*
*                  (c) lkc
*                  All Rights Reserved. lkc Confidential
*
\*********************************************************************/
/*********************************************************************\
*   Title                      :
*
*   Module Description         :
*
*   Author                     : lkc
*
*   Created                    : 2018-7-24
*
\*********************************************************************/

#ifndef PROTOCOLBASE_H
#define PROTOCOLBASE_H

#include <deque>
#include <memory>
#include <mutex>
#include "CommBase.h"

class ProtocolBase
{
public:
    virtual ~ProtocolBase() {}//对于存在虚函数的基类，一般要将基类析构函数定义为虚函数，从而合理地释放资源
    void SetCommTool(std::shared_ptr<CommBase>);
    std::shared_ptr<CommBase> GetCommTool() {return m_commTool;}
    virtual void ExtractData(const unsigned char* data,int nLength) = 0;
    virtual int CycleSendOnce() = 0;
protected:
    int Send(const unsigned char *sendBuf, int dataLen);
    virtual int GetCycleTimeMS() {return 0;}//默认周期发送时间为0，周期发送线程不做任何操作
protected:
    std::deque<unsigned char> m_bufferTemp;
    std::mutex m_bufferTempMtx;//m_bufferTemp容器锁，一个线程正在使用m_bufferTemp存容器时，其他线程不能修改
private:
    const int BUFFER_TEMP_SIZE = 1024;
    std::shared_ptr<CommBase> m_commTool;
};


#endif // PROTOCOLBASE_H


/********************************************************************\
 *
 * REVISION RECORDS
 *
\*********************************************************************/
/*********************************************************************/
/*
 *
 *
 *
\*********************************************************************/
/*------------------------------The End------------------------------*/
